package org.execute.tool.adsPower;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 线程安全的文件日志工具类
 * 用于在多线程环境下安全记录日志到文件
 */
public class FileLogger {
    // 日志文件保存路径
    private static final String LOG_FILE_PATH = "D:/java/tool/logs/adsPower_task.log";
    // 线程锁，保证多线程写入安全
    private static final ReentrantLock lock = new ReentrantLock();

    /**
     * 记录日志到文件
     * @param message 要记录的日志信息
     */
    public static void log(String message) {
        if (message == null || message.isEmpty()) {
            return;
        }

        // 获取当前时间
        String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
        // 构建完整日志内容
        String logContent = "[" + time + "] " + message + "\n";

        // 加锁确保线程安全
        lock.lock();
        try {
            // 确保日志目录存在
            File logFile = new File(LOG_FILE_PATH);
            File parentDir = logFile.getParentFile();
            if (parentDir != null && !parentDir.exists()) {
                parentDir.mkdirs(); // 自动创建目录
            }

            // 追加写入日志，使用UTF-8编码避免中文乱码
            try (BufferedWriter writer = new BufferedWriter(
                    new OutputStreamWriter(
                            new FileOutputStream(LOG_FILE_PATH, true),
                            "UTF-8"
                    )
            )) {
                writer.write(logContent);
            } catch (IOException e) {
                System.err.println("日志写入失败: " + e.getMessage());
                e.printStackTrace();
            }
        } finally {
            // 确保锁一定会释放
            lock.unlock();
        }
    }
}
